package com.cat.model.common.util;

import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;

import org.apache.commons.lang.StringUtils;

/**
 * 用于微信公众号
 * */
public class WechatPayUtil {
	private static final String jsapi_ticket_url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi";
	private static final String prePayOrderUrl = "https://api.mch.weixin.qq.com/pay/unifiedorder";
	
//	public static String prepayid(String orderNum, String body, String totalFee, String openId, String ip, Integer paySeq){
//		String appid = Config.PAY_APP_ID;
//		String mch_id = Config.PARTNER;
//		String nonce_str = Sha1Util.getNonceStr();
////		String out_trade_no = orderNum + "Z" + Math.round(Math.random()*8999+1000);;
//		String out_trade_no = orderNum;
//		
//		if(paySeq != null){
//			out_trade_no = orderNum + "Z" + StringUtils.leftPad(paySeq.toString(), 4, "0");
//		}
//		
//		String total_fee = totalFee;
//		System.out.println(total_fee);
//		
//		String notify_url = Constant.WECHATMP_NOTIFYURL;
//		String trade_type = "JSAPI";
//		
//		SortedMap<String, String> map = new TreeMap<String, String>();
//		map.put("appid", appid);
//		map.put("mch_id", mch_id);
//		map.put("openid", openId);
//		map.put("nonce_str", nonce_str);
//		map.put("body", body);
//
//		map.put("out_trade_no", out_trade_no);
//		map.put("total_fee", total_fee);
//		map.put("notify_url", notify_url);
//		map.put("trade_type", trade_type);
//		map.put("spbill_create_ip", ip);
//		
//		String sign = createSign(map);
//		System.out.println(sign);
//		map.put("sign", sign);
//		
//		String xml = XmlConverUtil.maptoXml(map);
//		try {
//			xml = new String(xml.getBytes(), "ISO8859-1");
//		} catch (UnsupportedEncodingException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}  
//		String result = HttpUtils.doPost(prePayOrderUrl, xml);
//		
//		System.out.println(result);
//		return result;
//	}
	
	/**
	 * 创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。
	 */
	@SuppressWarnings("rawtypes")
	public static String createSign(SortedMap<String, String> packageParams) {
		StringBuffer sb = new StringBuffer();
		Set es = packageParams.entrySet();
		Iterator it = es.iterator();
		while (it.hasNext()) {
			Map.Entry entry = (Map.Entry) it.next();
			String k = (String) entry.getKey();
			String v = (String) entry.getValue();
			if (null != v && !"".equals(v) && !"sign".equals(k)
					&& !"key".equals(k)) {
				sb.append(k + "=" + v + "&");
			}
		}
		String partnerKey=Config.PARTNER_KEY;
		
		sb.append("key=" + partnerKey);
		System.out.println("md5 sb:" + sb);
		String sign = MD5Util.MD5Encode(sb.toString(), "utf-8")
				.toUpperCase();

		return sign;
	}
	
//	public static String getJsapiTicket(){
//		String token = GetExistAccessToken.getInstance().getExistAccessToken();
//		String url = jsapi_ticket_url.replace("ACCESS_TOKEN", token);
//		String result = HttpUtil.doGetRequest(url);
//		try {
//			JSONObject json = new JSONObject(result);
//			return json.getString("ticket");
//		} catch (JSONException e) {
//			e.printStackTrace();
//		}
//		return null;
//	}
	
	public static void main(String[] args){
		System.out.println(StringUtils.leftPad("0", 4, "0"));
	}
}
